package com.atguigu.gmall.order.service;

import com.atguigu.gmall.model.enums.ProcessStatus;
import com.atguigu.gmall.model.order.OrderInfo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * ClassName: OrderInfoService
 * Package: com.atguigu.gmall.order.service
 * Description:
 *
 * @Author 刘轩
 * @Create 2023-09-02 15:33
 * @Version 1.0
 */


public interface OrderService extends IService<OrderInfo> {

 /**
  * 保存订单信息
  * @param orderInfo
  * @return
  */
 Long saveOrderInfo(OrderInfo orderInfo);

 /**
  * 获取流水号
  * @param userId
  * @return
  */
 String getTradeNo(String userId);

 /**
  * 比较流水号
  * @param tradeNo
  * @param userId
  * @return
  */
 Boolean checkTradeNo(String tradeNo,String userId);

 /**
  * 删除流水号
  * @param userId
  */
 void delTradeNo(String userId);

 /**
  * 校验库存
  * @param skuId
  * @param skuNum
  * @return
  */
 Boolean checkStock(Long skuId, Integer skuNum);

 /**
  * 查看我的订单
  * @param orderInfoPage
  * @param userId
  * @param orderStatus
  * @return
  */
 IPage<OrderInfo> getOrderPageList(Page<OrderInfo> orderInfoPage, String userId, String orderStatus);

 /**
  * 取消订单
  * @param orderId
  */

 void execExpiredOrder(Long orderId);

 /**
  * 根据订单Id 修改订单状态。
  * @param orderId
  * @param processStatus
  */
 public void updateOrderStatus(Long orderId, ProcessStatus processStatus);

 /**
  * 根据订单Id 获取数据
  * @param orderId
  * @return
  */
 OrderInfo getOrderInfo(Long orderId);

 /**
  * 发消息给库存
  * @param orderId
  */
    void senMsgToWare(Long orderId);


 /**
  * 将orderinfo转化为map
  * @param orderInfo
  * @return
  */
 Map initWare(OrderInfo orderInfo);

 /**
  *  拆单业务逻辑
  * @param orderId
  * @param wareSkuMap
  * @return
  */
 List<OrderInfo> orderSpilt(String orderId, String wareSkuMap);


 /**
  * 取消订单
  * @param orderId
  * @param flag
  */

    void execExpiredOrder(Long orderId, String flag);
}